바이트 기반 스트림

✒️ 2025-05-15 13:36 내용 수정


바이트 단위로 데이터를 전송하는 스트림

  1. InputStream
    • FileInputStream(파일), ByteArrayInputStream(메모리), PipedInputStream(프로세스), AudioInputStream(오디오) 클래스가 있다.
    • FileInputStream을 가장 많이 사용한다.
      • 이전에는 데이터들을 File와 시켜 저장하는 것이 주로 사용된 방식이었지만, 현재는 데이터 베이스에 주로 저장하기 때문
    • InputStream과 OutputStream은 생성 시 경로 설정을 해야 한다.
      • 절대경로 : 물리적 경로
      • 상대경로 : 내 위치를 기준으로 하는 경로
      • C++에서 불러오거나 저장할 파일의 경로를 설정하던 방법과 비슷하다.
FileInputStream 인스턴스이름 = new FileInputStream(파일경로\\이름);
FileInputStream 인스턴스이름 = new FileInputStream(파일클래스객체);
메서드 설명
int read() 문자를 1byte씩 읽고 반환. 더 이상 읽을 문자가 없으면 -1을 반환.
int read(byte[] b) 매개변수로 주어진 배열에 읽은 문자를 저장하고 실제로 읽은 수만큼 반환.
- 더 이상 읽을 문자가 없으면 -1을 반환.
- 배열 단위로 읽어오기 때문에 하나씩 읽어오는 것보다 속도가 빠르다.
int read(byte[] b, int offset int len) 매개변수로 주어진 배열에 정해진 범위만큼 읽어서 저장.
- 시작 위치(offset), 길이(len)
- 길이(len)를 배열의 길이로 설정하면 배열의 지우지 못한 공간으로 인해 글자가 잘린다.
int available() 스트림으로부터 읽어올 수 있는 데이터의 크기를 반환
close() 스트림 사용을 종료하고 자원을 반환
  1. OutputStream
    • FileOutputStream(파일), ByteArrayOutputStream(메모리), PipedOutputStream(프로세스), AudioOutputStream(오디오) 클래스가 있다.
    • 읽어온 파일을 복사하거나 다운로드할 때 많이 사용한다.
    • flush()를 해야 데이터를 실제 파일에 작성하는데, 현재는 close()에 auto flush가 있어 close()만 해도 된다. (물론 직접 flush()를 추가해도 된다)
      • C++에서 ROOT 파일 작성할 때 파일을 꼭 닫아줘야 저장이 완료되었다. (File.Close())
FileOutputStream 인스턴스이름 = new FileOutputStream(파일경로\\이름, 이어쓰기 옵션);
FileOutputStream 인스턴스이름 = new FileOutputStream(파일클래스객체, 이어쓰기 옵션);
메서드 설명
void write(int b) 단일값 b 출력
void write(byte[] b) 매개변수로 주어진 배열의 모든 바이트를 출력.
- 배열 단위로 작성하기 때문에 하나씩 작성하는 것보다 속도가 빠르다.
void write(byte[] b, int offset int len) 매개변수로 주어진 배열의 정해진 범위만큼 출력.
시작 위치(offset), 길이(len)
void flush() 출력 버퍼에 남은 모든 내용을 출력
close() 스트림 사용을 종료하고 자원을 반환